﻿package com.game.proxy
{
	import com.dusk.net.AssetManager;
	import com.dusk.util.ArrayUtil;
	import com.game.data.vo.EquipmentVO;
	import com.hurlant.util.Base64;
	
	import flash.system.System;
	
	//noinspection JSMismatchedCollectionQueryUpdate
	public class EquipProxy extends ConfigProxy
	{
		
		public function EquipProxy()
		{
			roleEquip = new Vector.<EquipmentVO>();//装备
			stuffEquip = new Vector.<EquipmentVO>();//物品
			consumeEquip = new Vector.<EquipmentVO>();//消耗品
		}
		
		private var roleEquip:Vector.<EquipmentVO>;
		private var stuffEquip:Vector.<EquipmentVO>;
		private var consumeEquip:Vector.<EquipmentVO>;
		private var allTypeEquip:Vector.<String> = new <String>["roleEquip", "stuffEquip", "consumeEquip"];
		private var fusionItems:Vector.<String> = new <String>[];
		private var makeItems:Vector.<String> = new <String>[];
		
		override public function setConfigData(config:Object):void
		{
			super.setConfigData(config);
		}
		
		/**
		 * 根据名字查找装备，如findByName("shsjt")
		 * @param id 装备id
		 * @return
		 */
		public function findByName(id:String):EquipmentVO
		{
			var vo:EquipmentVO = new EquipmentVO();
			vo.buildFromObject(getConfigBId(id));
			return vo;
		}
		
		/**
		 * 合成
		 * @param param1 合成的装备（EquipmentVO）
		 * @return
		 */
		public function mixProduce(param1:Array):Array
		{
			var arr:Array = [];
			for each (var mixItem:EquipmentVO in param1)
			{
				arr.push(mixItem.equipId)
			}
			for each(var item:String in fusionItems)
			{
				var _loc1_:String = Base64.decode(item);
				var input:Array = _loc1_.split("|")[0].split(";");
				var output:Array = _loc1_.split("|")[1].split(";");
				if (ArrayUtil.compare(arr, input))
				{
					return output;
				}
			}
			return ["", ""];
		}
		
		/**
		 * 根据名字查找装备类型，如findTypeByName("shsjt")
		 * @param name
		 * @return
		 */
		public function getTypeByName(name:String):String
		{
			return findByName(name).type;
		}
		
		/**
		 * 获取强化概率
		 * @param param1
		 * @param param2
		 * @return
		 */
		public function getStrengthNumber(param1:EquipmentVO, param2:EquipmentVO):Number
		{
			var _loc3_:* = 0;
			switch (param1.getLevel())
			{
				case 1:
					_loc3_ = Number(transLevelToProbability(param2, 0.375, 0.0937, 0.0234, 0.0058, 0, 0, 0));
					break;
				case 2:
					_loc3_ = Number(transLevelToProbability(param2, 1, 0.375, 0.0937, 0.0234, 0.0058, 0, 0));
					break;
				case 3:
					_loc3_ = Number(transLevelToProbability(param2, 1, 1, 0.375, 0.0937, 0.0234, 0.0058, 0));
					break;
				case 4:
					_loc3_ = Number(transLevelToProbability(param2, 1, 1, 1, 0.375, 0.0937, 0.04, 0.01));
					break;
				case 5:
					_loc3_ = Number(transLevelToProbability(param2, 1, 1, 1, 1, 0.375, 0.15, 0.05));
			}
			return _loc3_;
		}
		
		public function getNeedStrengthExp(vo:EquipmentVO):int
		{
			return vo.getStrengthLevel() * vo.getStrengthLevel() * 100;
		}
		
		public function getNeedStrengthLh(vo:EquipmentVO):int
		{
			if (!vo)
			{
				return 9999999;
			}
			switch (vo.getStrengthLevel())
			{
				case 0:
					return 200;
				case 1:
					return 500;
				case 2:
					return 1000;
				case 3:
					return 4000;
				case 4:
					return 8000;
				case 5:
					return 13000;
				case 6:
					return 20000;
				default:
					return 9999999;
			}//强化时所需要的灵魂数量
		}
		
		public function getFusionData():Vector.<String>
		{
			return fusionItems;
		}
		
		public function findResolution(param1:EquipmentVO):Array
		{
			var i:int = 0;
			var _loc2_:* = null;
			var _loc3_:* = null;
			var _loc4_:* = [];
			var _loc5_:int = 0;
			var _loc6_:int = 0;
			if (param1.quality == "普 通" || param1.quality == "普通")
			{
				_loc5_ = 1;
			}
			else if (param1.quality == "优 秀" || param1.quality == "优秀")
			{
				_loc5_ = 2;
				_loc6_ = 1;
			}
			else if (param1.quality == "精 良" || param1.quality == "精良")
			{
				_loc5_ = 3;
				_loc6_ = 2;
			}
			else if (param1.quality == "史 诗" || param1.quality == "史诗")
			{
				_loc5_ = 4;
				_loc6_ = 2;
			}
			else if (param1.quality == "邪 灵" || param1.quality == "邪灵")
			{
				_loc5_ = 4;
				_loc6_ = 2;
			}
			else if (param1.quality == "传 说" || param1.quality == "传说")
			{
				_loc5_ = 1;
				_loc6_ = 2;
				if (param1.type == "zbwq")
				{
					i = 0;
					while (i++ < 3)
					{
						_loc4_.push(findByName("tss"));
					}
				}
				else if (param1.type == "zbfj")
				{
					i = 0;
					while (i++ < 3)
					{
						_loc4_.push(findByName("yhs"));
					}
				}
				else
				{
					_loc5_ = 0;
					_loc6_ = 6;
				}
			}
			else if (param1.quality == "神 器" || param1.quality == "神器")
			{
				_loc5_ = 1;
				_loc6_ = 2;
				if (param1.type == "zbwq" && param1.equipId.indexOf("sq") != -1)
				{
					_loc4_.push(findByName("wpycjh"));
					if (Math.random() < 0.208)
					{
						_loc4_.push(findByName("wpxty"));
					}
				}
				else if (param1.type == "zbfj" && param1.equipId.indexOf("sq") != -1)
				{
					_loc4_.push(findByName("wpycjh"));
					if (Math.random() < 0.204)
					{
						_loc4_.push(findByName("wpzty"));
					}
				}
				else
				{
					_loc5_ = 0;
					_loc6_ = 6;
				}
			}
			while (_loc5_-- > 0)
			{
				if (param1.type == "zbwq" || param1.type == "zbsp")
				{
					if (Math.random() >= 0.5)
					{
						_loc2_ = findByName("wpxt");
					}
					else
					{
						_loc2_ = findByName("wpxt");
					}
				}
				else if (param1.user == "悟空")
				{
					if (Math.random() >= 0.5)
					{
						_loc2_ = findByName("wpxt");
					}
					else
					{
						_loc2_ = findByName("wpsc");
					}
				}
				else if (param1.user == "唐僧" || param1.user == "沙僧")
				{
					_loc2_ = findByName("wpsc");
				}
				else if (param1.user == "八戒")
				{
					_loc2_ = findByName("wpxt");
				}
				_loc4_.push(_loc2_);
				_loc2_ = null;
			}
			while (_loc6_-- > 0)
			{
				if (Math.random() < 0.3 * _loc6_)
				{
					_loc3_ = randomOneLevelOneGem();
					_loc2_ = _loc3_;
					_loc3_ = null;
					_loc4_.push(_loc2_);
				}
				_loc2_ = null;
			}
			return _loc4_;
		}
		
		public function isTheSameEquipmentByFillName(param1:EquipmentVO):Boolean
		{
			var _loc2_:EquipmentVO = findByName(param1.equipId);
			if (_loc2_.showId == param1.showId && _loc2_.name == param1.name && _loc2_.type == param1.type && _loc2_.user == param1.user)
			{
				return true;
			}
			return false;
		}
		
		public function getShenzhuValue(param1:String, param2:Array):EquipmentVO
		{
			var _loc14_:* = null;
			var _loc3_:* = param2.length;
			var _loc4_:int = 0;
			var _loc5_:int = 0;
			var _loc6_:int = 0;
			var _loc7_:int = 0;
			var _loc8_:* = 0;
			var _loc9_:* = 0;
			var _loc10_:* = 0;
			var _loc11_:int = 0;
			var _loc12_:int = 0;
			var _loc13_:* = null;
			while (_loc3_-- > 0)
			{
				_loc13_ = param2[_loc3_];
				_loc4_ += int(Number(_loc13_.getehp()) * 1.4);
				_loc5_ += int(Number(_loc13_.getemp()) * 1.4);
				_loc6_ += int(Number(_loc13_.geteatt()) * 1.4);
				_loc7_ += int(Number(_loc13_.getedef()) * 1.4);
				_loc8_ += Number(_loc13_.getemiss());
				_loc9_ += Number(_loc13_.getecrit());
				_loc10_ += Number(_loc13_.getmagicdef());
				_loc11_ += int(_loc13_.geteahp());
				_loc12_ += int(_loc13_.geteamp());
			}
			(_loc14_ = findByName(param1)).setehp(_loc4_);
			_loc14_.setemp(_loc5_);
			_loc14_.seteatt(_loc6_);
			_loc14_.setedef(_loc7_);
			_loc14_.setemiss(_loc8_);
			_loc14_.setecrit(_loc9_);
			_loc14_.setmagicdef(_loc10_);
			_loc14_.seteahp(_loc11_);
			_loc14_.seteamp(_loc12_);
			return _loc14_;
		}
		
		public function getSutraValue(param1:String, param2:Array):EquipmentVO
		{
			var _loc9_:* = null;
			var _loc3_:int = 0;
			var _loc4_:int = 0;
			var _loc5_:int = 0;
			var _loc6_:int = 0;
			var _loc7_:* = null;
			var _loc8_:uint = param2.length;
			while (_loc8_-- > 0)
			{
				_loc7_ = param2[_loc8_];
				_loc3_ += int(_loc7_.getehp());
				_loc4_ += int(_loc7_.getemp());
				_loc5_ += int(_loc7_.geteatt());
				_loc6_ += int(_loc7_.getedef());
			}
			if ((_loc9_ = findByName(param1)).equipId != "" && _loc9_.type != "zbtx")
			{
				_loc9_.setehp(int(_loc3_ / 3));
				_loc9_.setemp(int(_loc4_ / 3));
				_loc9_.seteatt(int(_loc5_ / 3));
				_loc9_.setedef(int(_loc6_ / 3));
			}
			return _loc9_;
		}
		
		public function getSunSutraValueEquip(param1:String, param2:Array):EquipmentVO
		{
			var _loc14_:* = null;
			var _loc15_:* = undefined;
			var _loc16_:* = undefined;
			var _loc3_:int = 0;
			var _loc4_:int = 0;
			var _loc5_:int = 0;
			var _loc6_:int = 0;
			var _loc7_:int = 0;
			var _loc8_:int = 0;
			var _loc9_:* = null;
			var _loc10_:* = 0;
			var _loc11_:* = 0;
			var _loc12_:* = 0;
			var _loc13_:uint = param2.length;
			while (_loc13_-- > 0)
			{
				if ((_loc9_ = param2[_loc13_]).getehp() > 0)
				{
					_loc3_ += int(_loc9_.getehp());
				}
				if (_loc9_.getemp() > 0)
				{
					_loc4_ += int(_loc9_.getemp());
				}
				if (_loc9_.geteatt() > 0)
				{
					_loc5_ += int(_loc9_.geteatt());
				}
				if (_loc9_.getedef() > 0)
				{
					_loc6_ += int(_loc9_.getedef());
				}
				if (_loc9_.getecrit() > 0)
				{
					_loc10_ = Number(_loc10_ + Number(_loc9_.getecrit()));
				}
				if (_loc9_.getemiss() > 0)
				{
					_loc11_ = Number(_loc11_ + Number(_loc9_.getemiss()));
				}
				if (_loc9_.geteahp() > 0)
				{
					_loc7_ += int(_loc9_.geteahp());
				}
				if (_loc9_.geteamp() > 0)
				{
					_loc8_ += int(_loc9_.geteamp());
				}
				if (_loc9_.getmagicdef() > 0)
				{
					_loc12_ = Number(_loc12_ + Number(_loc9_.getmagicdef()));
				}
			}
			(_loc14_ = findByName(param1)).setehp(int(_loc3_ / 1.5));
			_loc14_.setemp(int(_loc4_ / 1.5));
			_loc14_.seteatt(int(_loc5_ / 1.5));
			_loc14_.setedef(int(_loc6_ / 1.5));
			if ((_loc15_ = Number((_loc11_ / 1.5).toFixed(2))) >= 0.1)
			{
				_loc15_ = 0.1;
			}
			_loc14_.setecrit(Number((_loc10_ / 1.5).toFixed(2)));
			_loc14_.setemiss(_loc15_);
			_loc14_.seteahp(int(_loc7_ / 1.5));
			_loc14_.seteamp(int(_loc8_ / 1.5));
			if ((_loc16_ = Number((_loc12_ / 1.5).toFixed(2))) >= 0.2)
			{
				_loc16_ = 0.2;
			}
			_loc14_.setmagicdef(_loc16_);
			return _loc14_;
		}
		
		public function getSunValueEquip(param1:String, param2:Array):EquipmentVO
		{
			var _loc15_:* = null;
			var _loc3_:int = 0;
			var _loc4_:int = 0;
			var _loc5_:int = 0;
			var _loc6_:int = 0;
			var _loc7_:int = 0;
			var _loc8_:int = 0;
			var _loc9_:* = null;
			var _loc10_:* = null;
			var _loc11_:* = 0;
			var _loc12_:* = 0;
			var _loc13_:* = 0;
			var _loc14_:uint = param2.length;
			while (_loc14_-- > 0)
			{
				_loc9_ = param2[_loc14_];
				_loc10_ = findByName(_loc9_.equipId);
				_loc3_ += int(_loc10_.getehp());
				_loc4_ += int(_loc10_.getemp());
				_loc5_ += int(_loc10_.geteatt());
				_loc6_ += int(_loc10_.getedef());
				_loc11_ = Number(_loc11_ + Number(_loc10_.getecrit()));
				_loc12_ = Number(_loc12_ + Number(_loc10_.getemiss()));
				_loc7_ += int(_loc10_.geteahp());
				_loc8_ += int(_loc10_.geteamp());
				_loc13_ = Number(_loc13_ + Number(_loc10_.getmagicdef()));
			}
			(_loc15_ = findByName(param1)).setehp(int(_loc3_));
			_loc15_.setemp(int(_loc4_));
			_loc15_.seteatt(int(_loc5_));
			_loc15_.setedef(int(_loc6_));
			_loc15_.setecrit(Number(_loc11_));
			_loc15_.setemiss(Number(_loc12_));
			_loc15_.seteahp(int(_loc7_));
			_loc15_.seteamp(int(_loc8_));
			_loc15_.setmagicdef(Number(_loc13_));
			return _loc15_;
		}
		
		public function findNeedMaterialByName(param1:String):Array
		{
			var _loc1_:Array;
			var _loc2_:Array;
			var _loc3_:Array;
			var _loc4_:Array = [];//存储返回数据
			for each(var item:String in makeItems)
			{
				_loc1_ = Base64.decode(item).split(":");
				if (_loc1_[0] == param1)
				{
					_loc2_ = _loc1_[1].split(";");
					for each(var subItem:String in _loc2_)
					{
						_loc3_ = subItem.split("~");
						_loc4_.push({"equip": findByName(_loc3_[0]), "count": _loc3_[1]});
					}
					break;
				}
			}
			return _loc4_;
		}
		
		private function transLevelToProbability(param1:EquipmentVO, param2:Number, param3:Number, param4:Number, param5:Number, param6:Number, param7:Number, param8:Number):Number
		{
			if (param1.getStrengthLevel() == 0)
			{
				return param2;
			}
			if (param1.getStrengthLevel() == 1)
			{
				return param3;
			}
			if (param1.getStrengthLevel() == 2)
			{
				return param4;
			}
			if (param1.getStrengthLevel() == 3)
			{
				return param5;
			}
			if (param1.getStrengthLevel() == 4)
			{
				return param6;
			}
			if (param1.getStrengthLevel() == 5)
			{
				return param7;
			}
			if (param1.getStrengthLevel() == 6)
			{
				return param8;
			}
			return 0;
		}
		
		private function randomOneLevelOneGem():EquipmentVO
		{
			var _loc1_:Array = ["sms1", "mfs1", "gjs1", "fys1"];
			var _loc2_:int = Math.round(Math.random() * (_loc1_.length - 1));
			return findByName(_loc1_[_loc2_]);
		}
	}
}


class AllEquipUtils
{
	
	public static function compareArray(param1:Array, param2:Array):Boolean
	{
		var _loc3_:int = -1;
		var _loc4_:int = 0;
		while (_loc4_ < param1.length)
		{
			_loc3_ = param2.indexOf(param1[_loc4_]);
			if (_loc3_ != -1)
			{
				param2.splice(_loc3_, 1);
			}
			_loc4_++;
		}
		if (param2.length == 0)
		{
			return true;
		}
		param1 = null;
		param2 = null;
		return false;
	}
}